package dao.impl;

import dao.BaseDao;
import dao.DeptDao;
import entity.Dept;

import java.util.ArrayList;
import java.util.List;

public class DeptDaoImpl extends BaseDao implements DeptDao {

    @Override
    public List<Dept> findAll() {
        String sql="select dept_id,dept_name,dept_adds from tb_dept";
        List<Dept> depts=new ArrayList<>();
        try{
            open_db();
            pst=conn.prepareStatement(sql);
            rs=pst.executeQuery();
            while (rs.next()){
                Dept d=new Dept(
                        rs.getInt("dept_id"),
                        rs.getString("dept_name"),
                        rs.getString("dept_adds")
                );
                depts.add(d);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            close_db();
        }
        return depts;
    }

    @Override
    public boolean insert(Dept dept) {
        //0. 声明一个Int变量，保存受影响的行数
        int re=0;
        //1. SQL
        String sql="insert tb_dept values(?,?,?)";
        try {
            //2. 连接数据库
            open_db();
            //3. 把钥匙给pst
            pst=conn.prepareStatement(sql);
            //4. 把参数给pst
            pst.setObject(1,dept.getDeptId());
            pst.setObject(2,dept.getDeptName());
            pst.setObject(3,dept.getDeptAdds());
            //5. pst开始做事情
            //pst这里做的事情，返回的是受影响的行数
            re=pst.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //无论如何，都要关闭数据库
            close_db();
        }
        return re>0;
    }

    @Override
    public Dept findById(int deptId) {
        String sql="select dept_id,dept_name,dept_adds from tb_dept" +
                " where dept_id=?";
        Dept dept=new Dept();
        try{
            open_db();
            pst=conn.prepareStatement(sql);
            pst.setObject(1,deptId);
            System.out.println(pst.toString());
            rs=pst.executeQuery();
            while (rs.next()){
                dept.setDeptId(rs.getInt("dept_id"));
                dept.setDeptName(rs.getString("dept_name"));
                dept.setDeptAdds(rs.getString("dept_adds"));
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            close_db();
        }
        return dept;
    }

    @Override
    public boolean update(Dept d) {
        //0. 声明一个Int变量，保存受影响的行数
        int re=0;
        //1. SQL
        String sql="update tb_dept set dept_name=?,dept_adds=?" +
                " where dept_id=?";
        try {
            //2. 连接数据库
            open_db();
            //3. 把钥匙给pst
            pst=conn.prepareStatement(sql);
            //4. 把参数给pst
            pst.setObject(1,d.getDeptName());
            pst.setObject(2,d.getDeptAdds());
            pst.setObject(3,d.getDeptId());

            System.out.println(pst.toString());
            //5. pst开始做事情
            //pst这里做的事情，返回的是受影响的行数
            re=pst.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //无论如何，都要关闭数据库
            close_db();
        }
        return re>0;
    }

    @Override
    public boolean deleteDept(int deptId) {
//0. 声明一个Int变量，保存受影响的行数
        int re=0;
        //1. SQL
        String sql="delete from tb_dept where dept_id=?";
        try {
            //2. 连接数据库
            open_db();
            //3. 把钥匙给pst
            pst=conn.prepareStatement(sql);
            //4. 把参数给pst
            pst.setObject(1,deptId);
            System.out.println(pst.toString());
            //5. pst开始做事情
            //pst这里做的事情，返回的是受影响的行数
            re=pst.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //无论如何，都要关闭数据库
            close_db();
        }
        return re>0;
    }


}
